class ZY {
  constructor () {
    this.yi_txt = YI_TXT || ''
  }

  Bindex () {
    let bagua = `kun zhen kan dui gen li xun qian`.split(' ')
    let bagua1 = `di lei shui ze shan huo feng tian`.split(' ')
    let bgindex = `tian_tian tian_ze tian_huo tian_lei tian_feng tian_shui tian_shan tian_di ze_tian ze_ze ze_huo ze_lei ze_feng ze_shui ze_shan ze_di huo_tian huo_ze huo_huo huo_lei huo_feng huo_shui huo_shan huo_di lei_tian lei_ze lei_huo lei_lei lei_feng lei_shui lei_shan lei_di feng_tian feng_ze feng_huo feng_lei feng_feng feng_shui feng_shan feng_di shui_tian shui_ze shui_huo shui_lei shui_feng shui_shui shui_shan shui_di shan_tian shan_ze shan_huo shan_lei shan_feng shan_shui shan_shan shan_di di_tian di_ze di_huo di_lei di_feng di_shui di_shan di_di`.split(
      ' '
    )
    let num = `1 10 13 25 44 6 33 12 43 58 49 17 28 47 31 45 14 38 30 21 50 64 56 35 34 54 55 51 32 40 62 16 9 61 37 42 57 59 53 20 5 60 63 3 48 29 39 8 26 41 21 27 18 4 52 23 11 19 36 24 46 7 15 2`.split(
      ' '
    )
    let yi = {}

    let zy = bgindex.reduce((obj, item, index) => {
      obj[item] = num[index]
      return obj
    }, {})

    Array(64)
      .fill()
      .map((_, i) => i.toString(8))
      .forEach((item, i) => {
        if (/^\d$/.test(item)) {
          yi[item] = bagua1[0] + '_' + bagua1[item]
        } else {
          let [q, k] = item.split('')
          yi[item] = bagua1[q] + '_' + bagua1[k]
        }
      })
    return { zy, yi }
  }

  ZYindex (wgua = 2, ngua = 25) {
    wgua %= 8
    ngua %= 8
    let index = `di tian ze huo lei feng shui shan`.split(' ')
    let bgindex = `tian_tian tian_ze tian_huo tian_lei tian_feng tian_shui tian_shan tian_di ze_tian ze_ze ze_huo ze_lei ze_feng ze_shui ze_shan ze_di huo_tian huo_ze huo_huo huo_lei huo_feng huo_shui huo_shan huo_di lei_tian lei_ze lei_huo lei_lei lei_feng lei_shui lei_shan lei_di feng_tian feng_ze feng_huo feng_lei feng_feng feng_shui feng_shan feng_di shui_tian shui_ze shui_huo shui_lei shui_feng shui_shui shui_shan shui_di shan_tian shan_ze shan_huo shan_lei shan_feng shan_shui shan_shan shan_di di_tian di_ze di_huo di_lei di_feng di_shui di_shan di_di`.split(
      ' '
    )
    let num = `1 10 13 25 44 6 33 12 43 58 49 17 28 47 31 45 14 38 30 21 50 64 56 35 34 54 55 51 32 40 62 16 9 61 37 42 57 59 53 20 5 60 63 3 48 29 39 8 26 41 21 27 18 4 52 23 11 19 36 24 46 7 15 2`.split(
      ' '
    )

    let mindex = index[wgua] + '_' + index[ngua]

    let qiankun = bgindex.reduce((obj, item, index) => {
      obj[item] = num[index]
      return obj
    }, {})[mindex]
    return qiankun
  }

  ZhouyiEx (gLine) {
    let msg = ''
    let line = this.yi_txt.split(/^\s+$/gm)
    line.forEach((item, i) => {
      if (i === 2 * gLine - 1) msg += item + '\n'
      if (i === 2 * gLine) msg += item + '\n'
    })
    return msg
  }

  outGua (msg) {
    let guatext = msg.split(/\n/gm)
    let omsg = ''
    omsg += guatext[1] + '\n\n' + guatext[4] + '\n\n'
    return omsg
  }

  sixyao (msg) {
    let guatext = msg.split(/\n/gm)
    let omsg = ''
    omsg += this.outGua(msg)
    for (let index = 0; index < guatext.length; index++) {
      let item = guatext[index]
      if (/^$/.test(item)) continue
      if (/^(初|六|九|上|用).：/gm.test(item)) {
        omsg += item + '\n'
      }
    }
    return omsg
  }

  maixyao (msg, yao) {
    let guatext = msg.split(/\n/gm)
    let yaoci = []
    for (let index = 0; index < guatext.length; index++) {
      let item = guatext[index]
      if (/^$/.test(item)) continue
      if (/^(初|六|九|上|用).：/gm.test(item)) {
        yaoci.push(item)
      }
    }
    return { yao: yaoci[yao * 1], yaoci }
  }

  outtuan (msg) {
    let guatext = msg.split(/\n/gm)
    let omsg = ''
    omsg += this.outGua(msg)
    for (let index = 0; index < guatext.length; index++) {
      let item = guatext[index]
      if (/^$/.test(item)) continue
      if (/《彖》/gm.test(item)) {
        omsg += item + '\n'
      }
    }
    return omsg
  }

  outxiang (msg) {
    let guatext = msg.split(/\n/gm)
    let omsg = ''
    omsg += this.outGua(msg)
    for (let index = 0; index < guatext.length; index++) {
      let item = guatext[index]
      if (/^$/.test(item)) continue
      if (/《象》/gm.test(item)) {
        omsg += item + '\n'
      }
    }
    return omsg
  }

  maixiang (msg, yao) {
    let guatext = msg.split(/\n/gm)
    let yaoci = []
    for (let index = 0; index < guatext.length; index++) {
      let item = guatext[index]
      if (/^$/.test(item)) continue
      if (/《象》/gm.test(item)) {
        yaoci.push(item)
      }
    }

    return { yao: yaoci[yao * 1 + 1], yaoci }
  }
}
